package libra.controller;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import feign.Param;

/**
 * 使用@FeignClient注解标识OpenFeign定义的服务调用接口类，且该组件必须存在于容器内
 * 基于Feign的客户端负载均衡技术
 * 接口式、注解式编程
 * @FeignClient()：使用Feign负载均衡
 * name/value：指定被调用的微服务，填写spring.application.name微服务名，调用服务名，使用注册服务名即可不关心ip、port
 * path: 定义当前FeignClient的统一前缀，当我们项目中配置了server.context-path,server.servlet-path时使用
 *** @FeignClient只关心服务名，即ip、port；如果有项目名的话，需要在对应接口请求地址中进行补全 ***
 *** fallbackFactory属性用来处理通用的“服务降级”，OpenFeign自身无法独立完成该功能点，需要配合Hystrix处理 ***
 */
@Component
@FeignClient( name = "nacos-single-provider", path = "nacos_single_provider_30200",
			fallbackFactory=FeignInterFallbackFactory.class)
public interface OpenFeignService {
	@PostMapping("/provider/save")
	public Object create( @RequestParam("serial") String serial );
	@PostMapping("/provider/queryOne")
	public Object find( @RequestParam("id") Integer id );
	@PostMapping("/provider/queryList")
	public Object list( );
	@PostMapping("/provider/feignTimeOut")
	public Object feignTimeOut();
}
